<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // function test(a, b){ // a, b是形参
        //     console.log(a + b);
        // }

        // test(1, 2) // 1, 2是实参

        // 实参求和
        // function test() {
        //     var a = 0;
        //     for(var i = 0; i < arguments.length; i++){
        //         a += arguments[i];
        //     }
        //     console.log(a);
        // }
        // test(1, 2, 3, 4, 5); // 15

        // 实参求乘积
        // function test () {
        //     var s = 1;
        //     for(var i = 0; i < arguments.length; i++){
        //         s *= arguments[i]
        //     }
        //     console.log(s); // 120
        // }
        // test(1, 2, 3, 4, 5);
        
        // 函数内部可以改变实参
        // function test(a, b) {
        //     a = 3;
        //     console.log(arguments[0]); // 3
        // }
        // test(1, 2);

        // 实参没有传值，实参内部是不能改变值的
        // function test(a, b) {
        //     b = 3;
        //     console.log(arguments[1]); // undefind
        // }
        // test(1);

        // 作业
        // 1、定义一个函数，从wp接收一个饮料的名称，函数返回对应的价格
        // 2、定义一个函数，从wp接收第一个数，接收一个运算符号（+，-，*，/，%），接收第二个数，利用这个函数做运算，并返回运算结果
        // 3、定义一个函数，从wp接收一个n，算出n的阶乘，不能用for循环
        // 4、定义一个函数，从wp接收一个n，算出斐波那契数列的第N位，不能使用for循环

        // 作业1
        function test1(){
            var val = window.prompt("请输入饮料名称（可乐、雪碧）");
            switch(val){
                case '可乐':
                    alert('3元')
                    break;
                case '雪碧':
                    alert('6元')
                    break;
                default:
                    alert('没有这种饮料');
            }
        }

        // test1()

        // 作业2
        function test2(){
            var firstVal = window.prompt('请输入第一个数：'),
                fuhao,
                secondVal;
            if(firstVal && !isNaN(Number(firstVal))) {
                fuhao = window.prompt('请输入运算符号：')
                if(fuhao != '+' && fuhao != '-' && fuhao != '*' && fuhao != '/' && fuhao != '%'){
                    alert('输入错误！');
                    return
                }
                secondVal = window.prompt('请输入第二个数：')
                if(secondVal && !isNaN(Number(secondVal))){
                    switch(fuhao) {
                        case '+':
                            alert(Number(firstVal) + Number(secondVal));
                            break;
                        case '-':
                            alert(Number(firstVal) - Number(secondVal));
                            break;
                        case '*':
                            alert(Number(firstVal) * Number(secondVal));
                            break;
                        case '/':
                            alert(Number(firstVal) / Number(secondVal));
                            break;
                        case '%':
                            alert(Number(firstVal) % Number(secondVal));
                            break;
                        default:
                            alert('输入错误！')
                    }
                    return ;
                } else {
                    alert('输入错误！')
                }
            } else {
                alert('输入错误！')
            }
        }

        // test2();

        // 作业三(不能用for循环)
        function jiecheng(n) {
            if(n <= 0) {
                alert('参数不能小于0')
                return;
            }
            var num = 1,
                n1;
            while(n--){
                n1 = n + 1;
                num *= n1
            }
            console.log(num);
        }

        // jiecheng(4);

        // n! = n * (n -1) 规律
        // 出口
        function fact(n) {
            if(n === 1) {
                return 1;
            }
            return n * fact(n - 1);
        }

        //                        fact(5) = 5 * 24 = 120;
        // fact(5) = 5 * fact(4); fact(4) = 24; fact(5) = 5 * 24
        // fact(4) = 4 * fact(3); fact(3) = 6; fact(4) = 4 * 6
        // fact(3) = 3 * fact(2); fact(2) = 2; fact(3) = 3 * 2
        // fact(2) = 2 * fact(1); fact(1) = 1; fact(2) = 2 * 1

        // 作业4 斐波那契数列
        // 1, 1, 2, 3, 5, 8
        
        function fb(n){
            if(n <= 2) {
                return 1;
            }
            return fb(n - 1) + fb(n - 2);
        }

        var fb = fb(3);
        console.log(fb, 'fb');

        // fb(5) = fb(4) + fb(3); fb(4) = 3  fb(3) = 2  fb(5) = 5
        // fb(4) = fb(3) + fb(2); fb(3) = 2  fb(2) = 1  fb(4) = 3 
        // fb(3) = fb(2) + fb(1); fb(2) = 1  fb(1) = 1  fb(3) = 2
    </script>
</body>
</html>